home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1995 October
/
EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso
/
Aminet
/
comm
/
xeno
/
bbbbscd.lha
/
BBBBScd
/
System
/
s
/
bbsExtDL.shell
< prev
next >
Wrap
Text File
|
1995-03-18
|
21KB
|
805 lines
/* Based on: bbsExtDL.shell 8.2 (17.10.94) copyright 1992-94 Richard Stockton
FREELY DISTRIBUTABLE
****************************************************************************
CONVERTED FOR XENOLINK PRO BBS. $VERS:1.0 (18.03.95) by Derek Scott,2:259/75
****************************************************************************
Allows Xenolink user to download from extra devices like CD drives.
Keeps track of time left to this user.
Just ignores file or directory names that contain spaces because Xenolink
would be unable to download them anyway. (But handles recursive files &
directories OK, archived by LZX by use of 'SELECT ALL' parameter)
Ignores icons (files that end in .info).
A textfile CD_Exclude , controls exclusion of drawers on certain CDs that
contain copyright files. Other specific files or directories can be excluded
by adding their paths to the CD_Exclude textfile, one path per line.
Super-sysop may select very large directories and have their formatted
display lists cached as textfiles in bbspath'Cache'. This can greatly
improve access time for very large drawers, especially if they contain
sub-directories.
Ability to 'READ' text files from within CD door.
Configurable 'maximum size' of user selected files/output archive.
All Selected files are Archived with LZX and attached to private mail for
user. (requires "Junkmail" Xenolink utility by Alan Bland)
*/
OPTIONS RESULTS /*sets internal default to request RESULTS string from host*/
FF='0C'x /* defines hex-decimal value for FORM FEED (clear screen)*/
CR='0D'x /* defines hex-decimal value for CARRIAGE RETURN*/
SIGNAL ON BREAK_C
SIGNAL ON BREAK_E
SIGNAL ON ERROR
PARSE ARG name
IF name='' THEN EXIT
cfgfile='xconfig:BBBBScd.config'
/* Open the support library if it is not already open. (yawn...)*/
if ~show('L',"rexxsupport.library") THEN
DO
addlib('rexxsupport.library',0,-30,0)
END
if ~show('L',"rexxmathlib.library") THEN
DO
addlib('rexxmathlib.library',0,-30,0)
END
SAY ' '
if ~show('L',"rexxarplib.library") THEN
DO
addlib('rexxarplib.library',0,-30,0)
END
IF ~SHOW('P','QuickSortPort') THEN
DO
/* Add the QuickSort port, so we can use QSORT.
* First check if the port is already up. If not, run QuickSort
* and wait for the port to be there */
if ~showlist('p','QuickSortPort') then
do
ADDRESS COMMAND "run quicksort >NIL:"
do i = 1 to 10
if ~showlist('p','QuickSortPort') then call delay 20
else leave i
end
if showlist('p','QuickSortPort') then call addlib('QuickSortPort',-30)
end
end
IF ~SHOW('P','QuickSortPort') THEN EXIT 666
/* read the configuration parameters from XCONFIG:BBBBScd.CFG */
x=OPEN(f,cfgfile,'R')
IF x~=0 THEN
DO
bbspath=READLN(f)
devlist=READLN(f)
sysoplevel=VALUE(WORD(READLN(f),1))
junk=READLN(f)
junk=READLN(f)
xrecursive_size=VALUE(WORD(READLN(f),1))
junk=READLN(f)
lzxflag=READLN(f)
CALL CLOSE(f)
END
ELSE
/* can't open config file, so use defaults... :) */
DO
bbspath='doors:bbbbsCD/'
devlist='CD0: CD1: CD2: CD50: CD51: CD52: CD53: CD54: CD55: CD56:'
sysoplevel=224
lzxflag='N'
END
/***************************************************************************/
/* set additional parameters about user, passed by Xenolink node */
level=255
maxtime=3600
linesperpage=24
menuset=1
nodex=0
namex=name
colorflag=1
node=nodex
exclude=''
x=OPEN(f,bbspath'CD_Exclude','R')
IF x~=0 THEN exclude=READCH(f,65000)
CALL CLOSE(f)
exclude=UPPER(TRANSLATE(exclude,' ','0A'x))
lists.=''
lists.0=0
maxtime=maxtime-30
CALL TIME('R')
CR='0D'x
def=''
pen3='
'
IF colorflag<1 THEN
DO
def=''
pen3=''
END
ELSE colorflag=1
saytxt=FF
SAY saytxt
x=OPEN(f,bbspath'EXT_INFO','R')
IF x=0 THEN SAY bbspath'EXT_INFO failed to open!'
ELSE
DO
DO i=1 WHILE ~EOF(f)
saytxt=READLN(f)||CR
SAY saytxt
IF (i+2)//linesperpage=0 THEN
DO
OPTIONS PROMPT 'Press RETURN'
PULL junk
saytxt='1B'x'M'||'1B'x'M'CR
SAY saytxt
END
END
CALL CLOSE(f)
END
selected=''
path=''
templist=devlist
devlist=''
longest=0
CALL PRAGMA('W','N') /* disk requesters OFF */
CALL PRAGMA('D',bbspath'Information')
test3=PRAGMA('D')
DO i=1 TO WORDS(templist)
test=WORD(templist,i)
IF ~EXISTS(test) THEN ITERATE i
IF SHOWLIST('A',UPPER(LEFT(test,LENGTH(test)-1))) THEN test2=test
ELSE
DO
CALL PRAGMA('D',test)
test2=PRAGMA('D')
/************************************************************/
/* DAS - Fool System into thinking Assigns are REAL Devices */
IF test2='d::' THEN test2='Pro_CD1:'
/* DAS */
/************************************************************/
IF test2=test3 THEN ITERATE i
IF WORDS(test2)>1 THEN test2=test
END
devlist=STRIP(devlist test2)
IF LENGTH(test2)>longest THEN longest=LENGTH(test2)
END
cols=76%(longest+8)
IF devlist='' THEN
DO
SAY
saytxt='*** Sorry, no External Devices are available! ***'CR
SAY saytxt
SAY
OPTIONS PROMPT 'Press RETURN'
PULL junk
EXIT('')
END
picklist=devlist
IF WORDS(picklist)=1 THEN
DO
path=picklist
IF RIGHT(path,1)~=':' THEN path=path'/'
picklist=makepicklist()
END
ELSE
DO
lists.0=1
dirs=WORDS(devlist)
END
OPTIONS PROMPT 'Press RETURN'
PULL junk
DO loop=1
test=TIME('E')
IF test>(maxtime-100) THEN
DO
SAY
IF test>maxtime THEN
DO
saytxt='*** This session''s time is expiring! ***'CR
SAY saytxt
SAY
LEAVE loop
END
ELSE SAY '*** Less than 2 minutes remaining! ***'
SAY CR
END
filename=pick(picklist)
IF filename='' THEN
DO
temp=path
IF RIGHT(temp,1)='/' THEN temp=LEFT(temp,LENGTH(temp)-1)
IF FIND(UPPER(devlist),UPPER(temp))>0 THEN
DO
IF WORDS(devlist)=1 THEN ITERATE loop
picklist=devlist
path=''
ITERATE loop
END
ELSE
DO
test=RIGHT(path,1)
IF test='/' THEN path=LEFT(path,LENGTH(path)-1)
slash=LASTPOS('/',path)
IF slash=0 THEN slash=LASTPOS(':',path)
path=LEFT(path,slash)
END
END
IF filename=':-)' THEN ITERATE loop
tempath=path||filename
temp=WORD(STATEF(tempath),1)
IF temp='FILE' THEN
DO
IF FIND(UPPER(selected),UPPER(tempath))=0 THEN
selected=selected tempath
ELSE selected=DELWORD(selected,FIND(UPPER(selected),UPPER(tempath)),1)
shosel=''
ITERATE loop
END
ELSE IF temp='DIR' THEN
DO
path=tempath
test=RIGHT(path,1)
IF test~='' & test~='/' & test~=':' THEN path=path'/'
END
ELSE IF UPPER(filename)='DONE' THEN LEAVE loop
IF path~='' THEN picklist=makepicklist()
END
selected=STRIP(selected)
test=''
/* IF WORDS(selected)>0 THEN test=UPPER(RIGHT(selected,4))
IF selected~='' & test~='.LZX' & test~='.LHA' & test~='.LZH' & test~='.DMS' & test~='.ZOO' THEN */
IF WORDS(selected)>0 THEN
DO
SAY
SAY 'You may choose to have your selection(s) archived using LhA or LZX.'
SAY 'Answer [Y] to begin, or [N] to CANCEL ALL your selected files.'
SAY 'The completed archive will be attached to email addressed to you.'
SAY
OPTIONS PROMPT 'Archive selected files? (nY) > '
PULL temp
temp=UPPER(temp)
IF LEFT(temp,1)~='N' THEN
DO
DO jj = 1
SAY ' '
IF lzxflag='Y' THEN
DO
OPTIONS PROMPT 'Archive using lz(X) or l(H)a? (xH) > '
PULL temp
IF temp='' THEN iterate jj
temp=LEFT(UPPER(temp),1)
IF temp~='X' & temp~='H' THEN iterate jj
END
ELSE
temp='H' /* default to LHA if config flag not set */
ADDRESS AREXX bbsArcExt.rexx name nodex temp selected
LEAVE jj
END
selected=''
SAY
SAY 'The BBS will notify you online when your archive is ready.'
SAY
END
END
SAY 'Returning to the BBS...'
SAY
EXIT
makepicklist:
IF path='' THEN RETURN ''
IF STORAGE()<100000 THEN
DO
lists.=''
lists.0=0
IF WORDS(devlist)>1 THEN
DO
lists.0=1
lists.1.0=devlist
END
END
DO i=1 TO lists.0
IF path=lists.i THEN RETURN lists.i.0
END
cname=STRIP(RIGHT(COMPRESS(path,' ._-:/'),29))
IF cname~='' & EXISTS(bbspath'Cache/'cname) THEN
DO cloop=1 TO 1
k=lists.0+1
lists.0=k
x=OPEN(f,bbspath'Cache/'cname'.','R')
IF x=0 THEN SAY bbspath'Cache/'cname'. failed to open!'
ELSE
DO
cpath=READLN(f)
IF cpath=path THEN lists.k=path
ELSE
DO
IF level>sysoplevel THEN
SAY path 'does not match cache path in' cname'. !'
CALL CLOSE(f)
lists.0=lists.0-1
LEAVE cloop
END
DO i=1
line=READLN(f)
IF EOF(f) THEN LEAVE i
IF colorflag~=1 THEN
DO
n=POS('1B'x,line)
DO WHILE n>0
DO m=2
IF DATATYPE(SUBSTR(line,n+m,1),'M') | (n+m+1)>LENGTH(line) THEN
leave m
END
line=DELSTR(line,n,m+1)
n=POS('1B'x,line)
END
END
lists.k.i=line
END
CALL CLOSE(f)
lists.k.ROWS=i-1
END
x=OPEN(f,bbspath'Cache/'cname,'R')
IF x=0 THEN
DO
SAY bbspath'Cache/cname failed to open!'CR
CALL CLOSE(f)
lists.0=lists.0-1
LEAVE cloop
END
ELSE
DO
plist=READCH(f,65000)
CALL CLOSE(f)
lists.k.0=plist
RETURN plist
END
END
SAY 'Loading...'CR
CALL FileList(path'*',filelist,'F','N')
IF filelist.0>1 THEN CALL QSORT(1,filelist.0,filelist)
CALL FileList(path'*',dirlist,'D','N')
IF dirlist.0>1 THEN CALL QSORT(1,dirlist.0,dirlist)
plist=''
dirs=0
longest=0
DO i=1 TO filelist.0
IF WORDS(filelist.i)~=1 THEN ITERATE i
IF filelist.i='' THEN ITERATE i
IF UPPER(RIGHT(filelist.i,5))='.INFO' THEN ITERATE i
IF FIND(exclude,UPPER(path||filelist.i))>0 THEN ITERATE i
plist=STRIP(plist filelist.i)
IF LENGTH(filelist.i)>longest THEN longest=LENGTH(filelist.i)
END
DO i=1 TO dirlist.0
IF WORDS(dirlist.i)~=1 THEN ITERATE i
IF FIND(exclude,UPPER(path||dirlist.i))>0 THEN ITERATE i
plist=STRIP(plist dirlist.i)
IF LENGTH(dirlist.i)>longest THEN longest=LENGTH(dirlist.i)
dirs=dirs+1
END
cols=76%(longest+9)
lists.0=lists.0+1
i=lists.0
lists.i=path
lists.i.0=plist
DROP filelist. dirlist.
RETURN plist
pick:
PARSE ARG list
selection=''
DO k=1 TO lists.0
IF path=lists.k THEN LEAVE k
END
IF ~DATATYPE(lists.k.ROWS,'N') THEN
DO
items=WORDS(list)
IF items<75 & dirs<25 THEN SAY 'Formatting' items 'items...'
ELSE SAY 'Please be patient, formatting' items 'items may take a while the first time...'
lists.k.ROWS=(items%cols)+((items//cols)>0)
IF cols>items THEN cols=items
IF cols<1 THEN cols=1
longest=(76%cols)-8
lists.k=path
DO j=0 TO cols-1
DO i=1 TO lists.k.ROWS
thisnum=j*lists.k.ROWS+i
IF thisnum<=items THEN
DO
thisitem=WORD(list,thisnum)
filestat=STATEF(path||thisitem)
thisitem=LEFT(thisitem,longest)' '
IF WORD(filestat,1)='DIR' THEN
lists.k.i=lists.k.i||pen3'(dir) 'thisitem||def
ELSE
DO
bytes=WORD(filestat,2)
IF bytes<10000 THEN
lists.k.i=lists.k.i||RIGHT(bytes,5) thisitem
ELSE IF bytes>1023999 THEN
lists.k.i=lists.k.i||RIGHT(bytes%1024000,4)'m' thisitem
ELSE lists.k.i=lists.k.i||RIGHT(bytes%1024,4)'k' thisitem
END
END
END
END
IF level>sysoplevel & items>24 THEN
DO
SAY items 'items,' dirs 'dirs,' lists.k.ROWS 'rows'
OPTIONS PROMPT 'FileCache' path'? (Ny) > '
PULL junk
junk=UPPER(LEFT(junk,1))
IF junk='Y' THEN
DO
CALL MAKEDIR(bbspath'Cache')
cname=STRIP(RIGHT(COMPRESS(path,' ._-:/'),29))
x=OPEN(f,bbspath'Cache/'cname,'W')
IF x=0 THEN SAY 'Unable to open cache file' cname'!'
ELSE
DO
CALL WRITECH(f,list)
CALL CLOSE(f)
END
x=OPEN(f,bbspath'Cache/'cname'.','W')
IF x=0 THEN
DO
SAY 'Unable to open cache file' cname'. !'CR
CALL DELETE(bbspath'Cache/'cname)
END
ELSE
DO
CALL WRITELN(f,path)
DO i=1 TO lists.k.ROWS
CALL WRITELN(f,TRIM(lists.k.i))
END
CALL CLOSE(f)
SAY path 'has been cached.'
END
END
END
END
IF selected~='' THEN
DO
SAY
w=WORDS(selected)
temp=pen3' 'w def'selected files.'
IF shosel~=1 THEN
DO
saytxt=pen3'selected:'def||CR
SAY saytxt
DO i=1 TO w
saytxt=WORD(selected,i)||CR
SAY saytxt
END
END
ELSE
DO
temp='Enter' pen3'SHOW S'def'elected to display'temp
SAY temp||CR
END
IF w>5 THEN shosel=1
END
SAY CR
saytxt='current path ='pen3 path||def||CR
SAY saytxt
saytxt=LEFT('-',75,'-')||CR
SAY saytxt
DO i=1 TO lists.k.ROWS
saytxt=TRIM(lists.k.i)||CR
SAY saytxt
IF (i+2)//(linesperpage-1)=0 & nonstop~=1 THEN
DO
CALL whodat()
OPTIONS PROMPT ' - ['pen3'N'def']on-stop ['pen3'Q'def']uit ['pen3'RETURN'def']=Continue - '
PULL junk
IF LEFT(UPPER(junk),1)='Q' THEN LEAVE i
IF LEFT(UPPER(junk),1)='N' THEN nonstop=1
END
END
nonstop=0
saytxt=LEFT('-',75,'-')||CR
SAY saytxt
CALL whodat()
readflag=0
DO getloop=1
pstring=showtime()' Enter ''?'' for HELP > '
OPTIONS PROMPT pstring
PARSE PULL selection
/* PARSE selection */
IF selection='?' THEN
DO
CALL help()
OPTIONS PROMPT 'Press RETURN'
PULL junk
selection=';-)'
LEAVE getloop
END
IF LEFT(selection,1)='/' THEN selection=STRIP(SUBSTR(selection,2))
IF WORDS(selection)>1 THEN
DO
IF LEFT(UPPER(selection),6)='SHOW S' THEN
DO
shosel=''
selection=';-)'
LEAVE getloop
END
IF UPPER(selection)='SELECT ALL' THEN
DO
IF path='' | RIGHT(path,1)=':' | POS(UPPER(path),UPPER(devlist))>0 THEN
DO
SAY
saytxt=pen3'*** Archiving entire devices at one time is NOT allowed! ***'def||CR
SAY saytxt
SAY
ITERATE getloop
END
CALL selall(path xrecursive_size)
shosel=''
selection=':-)'
LEAVE getloop
END
ELSE IF UPPER(WORD(selection,1))='READ' THEN
DO
readflag=1
selection=STRIP(DELWORD(selection,1,1))
END
ELSE IF UPPER(WORD(selection,1))='CD' THEN selection=SUBSTR(selection,4)
ELSE IF UPPER(WORD(selection,1))='DIR' THEN selection=SUBSTR(selection,5)
END
i=FIND('DONE' UPPER(list),UPPER(selection))
IF i=0 THEN
DO
i=FIND('DONE' UPPER(list),UPPER(selection':'))
IF i=0 THEN
DO
IF UPPER(selection)='KINGFISHER' THEN
DO
IF EXISTS('rexx:KingFisher.rexx') THEN
CALL KingFisher.rexx(name '. .' colorflag maxtime)
ELSE IF EXISTS(bbspath'rexxDoors/KingFisher.rexx') THEN
DO
curdir=PRAGMA('D',bbspath'rexxDoors')
CALL KingFisher.rexx(name '. .' colorflag maxtime)
curdir=PRAGMA('D',curdir)
END
ELSE SAY 'KingFisher.rexx not found!'
ITERATE getloop
END
ELSE IF UPPER(selection)='Q' THEN selection='DONE'
ELSE ITERATE getloop
END
ELSE selection=selection':'
END
IF selection='' & path='' THEN ITERATE getloop
ELSE IF i>1 THEN selection=WORD(list,i-1)
IF readflag=1 THEN
DO
endtest=UPPER(RIGHT(selection,4))
IF FIND('.ARC .DMS .LZH .LHA .ZIP .ZOO',endtest)>0 THEN
DO
CALL Contents.rexx(path||selection)
IF EXISTS('RAM:CONTENTS') THEN CALL showtext('RAM: CONTENTS')
END
ELSE CALL showtext(path selection)
readflag=0
selection=';-)'
END
LEAVE getloop
END
RETURN selection
selall: PROCEDURE EXPOSE selected pen3 def CR
PARSE ARG dir xrecursive_size .
IF FIND(exclude,UPPER(dir))>0 THEN RETURN
saytxt='Sizing'pen3 dir||def||CR
SAY saytxt
IF RIGHT(dir,1)~='/' THEN dir=dir'/'
/* DAS */
sizefile='RAM:bbsCDsize'nodex
ADDRESS COMMAND 'c:nl >'sizefile' 'dir' -Z -W -F'
ADDRESS COMMAND 'c:WAIT 5'
okflag=0
fsize=0
DO zloop=1 TO 10
zz=OPEN(f10,sizefile,'r')
IF zz=0 THEN
DO
SAY 'Waiting for Sizefile...'
ADDRESS COMMAND 'c:WAIT 5'
ITERATE zloop
END
ELSE
DO
okflag=1
LEAVE zloop
END
END
IF okflag~=1 THEN
DO
SAY 'Sorry, too many files... SELECT ALL cancelled!'
ADDRESS COMMAND 'C:WAIT 2'
RETURN
END
zzsizetot=0
zzfiletot=0
zzdirtot=0
zzpath=''
DO zz2=1
line = READLN(f10)
IF EOF(f10) THEN LEAVE zz2
IF line='' THEN ITERATE
IF UPPER(WORD(line,2))='FILES' THEN
DO
IF UPPER(WORD(line,1))='NO' THEN iterate zz2
SAY RIGHT(zzpath,32)', 'VALUE(WORD(line,1))' file(s), 'VALUE(WORD(line,13))' bytes'
zzsizetot=zzsizetot+VALUE(WORD(line,13))
zzfiletot=zzfiletot+VALUE(WORD(line,1))
zzdirtot=zzdirtot+1
END
ELSE IF UPPER(WORD(line,1))="DIRECTORY" THEN zzpath=WORD(line,3)
END
CALL CLOSE(f10)
saytxt=pen3'Total:'def' 'zzdirtot''pen3' dir(s), 'def''zzfiletot''pen3' file(s), 'def''zzsizetot''pen3' bytes'||def||CR
SAY saytxt
IF zzsizetot>xrecursive_size THEN
DO
saytxt=pen3'*CANCELLED*'def' the maximum bytes allowed per 'pen3'SELECT ALL'def' is: 'pen3''xrecursive_size' bytes!!!'||def||CR
SAY saytxt
END
IF zzsizetot~>xrecursive_size THEN selected=selected' 'dir'*'
ADDRESS COMMAND 'C:WAIT 4'
RETURN
showtext:
PARSE ARG tpath' 'textfile
test=RIGHT(tpath,1)
IF test~='' & test~=':' & test~='/' THEN tpath=tpath'/'
x=OPEN(f,STRIP(tpath||textfile),'R')
IF x=0 THEN RETURN
test=READCH(f,64)
mask=XRANGE(,'06'x)||XRANGE('0E'x,'1A'x)||XRANGE('1C'x,'1F'x)
IF VERIFY(test,mask,'M')>0 THEN
DO
CALL CLOSE(f)
testloc=VERIFY(test,mask,'M')
saytxt='*** not an archive or a text file! ***'CR
SAY saytxt
saytxt='Character number' testloc 'is ASCII' C2D(SUBSTR(test,testloc,1))||CR
SAY saytxt
RETURN
END
CALL SEEK(f,0,'B')
SAY
saytxt='-' tpath||textfile '-'CR
SAY saytxt
DO i=1 WHILE ~EOF(f)
saytxt=COMPRESS(READLN(f),CR||'0C'x)||CR
SAY saytxt
IF i//(linesperpage-1)=0 & nonstop~=1 THEN
DO
CALL whodat()
OPTIONS PROMPT ' - ['pen3'N'def']on-stop ['pen3'Q'def']uit ['pen3'RETURN'def']=Continue - '
PULL junk
IF LEFT(UPPER(junk),1)='Q' THEN LEAVE i
IF LEFT(UPPER(junk),1)='N' THEN nonstop=1
/* IF colorflag=1 | ADDRESS()~='BAUD'THEN
saytxt='1B'x'M'||LEFT('',60)||'1B'x'M'||CR
SAY saytxt */
END
END
CALL CLOSE(f)
IF i//(linesperpage-1)>1 THEN
DO
OPTIONS PROMPT ' - ['pen3'RETURN'def']=Continue - '
PULL junk
END
nonstop=0
RETURN
whodat:
IF ADDRESS()~='BAUD' THEN RETURN
MSG RIGHT(' ',66-LENGTH(name)) '1B'x'M'||'
'||'
'||' 'name' level 'level' '||'
'
RETURN
help:
SAY
SAY
saytxt=pen3'- HELP -'def
SAY saytxt
SAY
saytxt='You can navigate through directory levels using the following commands.'CR
SAY saytxt
saytxt='Remember that the name must appear in the display before you can select it.'CR
SAY saytxt
saytxt='Filenames are displayed with their filesizes on the left, and directories'CR
SAY saytxt
saytxt='will have a' pen3'(dir)'def' on their left.'CR
SAY saytxt
SAY
saytxt='To select an item from the displayed list, enter its name as displayed.'CR
SAY saytxt
saytxt='If the selected item is a' pen3'directory'def', its contents will be displayed.'CR
SAY saytxt
saytxt='If the selected item is a file, it is added to the ''selected'' list.'CR
SAY saytxt
saytxt='To remove a selected file from the list, enter its name again.'CR
SAY saytxt
SAY
saytxt='To display the parent directory, enter an ''empty'' RETURN'CR
SAY saytxt
saytxt='To read a textfile or see the contents of an archive, enter' pen3'READ'def 'filename.'CR
SAY saytxt
saytxt='To select ALL items from the current display, including the contents of all'CR
SAY saytxt
saytxt='displayed directories and their sub-directories, enter 'pen3'SELECT ALL'def'.'CR
SAY saytxt
SAY
IF EXISTS('rexx:KingFisher.rexx') | EXISTS(bbspath'rexxDoors/KingFisher.rexx') THEN
DO
saytxt='Enter 'pen3'KINGFISHER'def' to use the online search utility.'CR
SAY saytxt
END
SAY
saytxt='Enter'pen3 'DONE' def'to return to the BBS (and download any selected files)'CR
SAY saytxt
SAY
RETURN
showtime:
mins=(maxtime-TIME('E'))%60
secs=TRUNC((maxtime-TIME('E'))//60)
IF secs<10 THEN secs='0'secs
RETURN 'Time Remaining: 'mins':'secs
BREAK_E:
SAY
saytxt=pen3'*** CONTROL-E BREAK ***'def||CR
SAY saytxt
i=999999
RETURN ''
BREAK_C:
SAY CR
EXIT ''
/* bbsExtDL.baud */